[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
2 02 Reverse URL | ✅저자: 이유정(박사)
🔹 Reverse URL (역참조)란?
URL 역참조는 path()
함수에서 name으로 지정한 URL 이름을 사용하여,
실제 경로를 자동으로 생성하는 기능입니다.
즉, 주소(/polls/
)를 코드에 직접 쓰지 않고, URL 이름(name)으로 대신 사용하는 방식입니다.
❓ 왜 역참조(reverse URL)가 필요할까?
<!-- ❌ 안 좋은 예 -->
<a href="/polls/">투표하기</a>
- URL이 바뀌면 모든 코드에서 일일이 수정해야 함
- 유지보수가 매우 어렵고, 실수 가능성 높음
name='index'
추가
# polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
# ⭕ 템플릿에서 {% url 'index' %}로 사용 가능
]
✅ 그래서 URL 이름(name)을 사용해 다음과 같이 작성합니다:
<!-- ⭕ 좋은 예 -->
<a href="{% url 'index' %}">투표하기</a>
name='index'
로 지정된 URL 경로를 자동으로 찾아 연결해줌- URL이 바뀌어도 이 부분은 자동으로 반영됨
🔹 reverse()
함수 (파이썬 코드 안에서 사용)
HTML 템플릿이 아닌, Python 코드 안에서 URL을 만들고 싶을 때는 reverse()
함수를 사용합니다.
from django.urls import reverse
url = reverse('index')
print(url) # 출력: /polls/
🔄 정리: url
태그 vs reverse()
함수
사용 위치 | 사용법 | 예시 |
---|---|---|
템플릿(HTML) | {% url 'name' %} |
<a href="{% url 'index' %}"> |
Python 코드 | reverse('name') |
url = reverse('index') |
✨ 한 줄 요약:
- Reverse URL은 URL 경로를 직접 쓰지 않고 이름으로 참조하는 방법입니다.
- 유지보수가 쉽고, URL이 바뀌어도 자동 반영되어 실수를 줄일 수 있습니다.
1️⃣ models.py – Post 모델 정의
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
def __str__(self):
return self.title
2️⃣ views.py – 상세 페이지 뷰 정의
from django.shortcuts import render, get_object_or_404
from .models import Post
def post_detail(request, id):
post = get_object_or_404(Post, pk=id)
return render(request, 'post_detail.html', {'post': post})
get_object_or_404()
는 Post.objects.get(pk=id)
보다 안전하게 처리함
글이 없으면 404 페이지로 자동 응답
3️⃣ urls.py – URL 연결
from django.urls import path
from . import views
urlpatterns = [
path('post/<int:id>/', views.post_detail, name='post-detail'),
]
4️⃣ post_detail.html – 템플릿 작성
<!-- templates/post_detail.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>{{ post.title }}</title>
</head>
<body>
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
</body>
</html>
템플릿 경로는 settings.py의 DIRS 설정에 맞춰 templates/ 폴더 안에
둡니다.
5️⃣ settings.py – 템플릿 설정 확인
'DIRS': [BASE_DIR / 'templates'],
6️⃣ 테스트 데이터 생성 (Django Shell)
python manage.py shell
from import_test.models import Post
Post.objects.create(title="첫 번째 글", content="장고 테스트 게시물입니다.")
서버 실행
python manage.py runserver
브라우저 접속
http://localhost:8000/post/1/
화면출력
제목: 첫 번째 글
내용: 장고 테스트 게시물입니다.